
---@class Rect
---@field x number
---@field y number
---@field width number
---@field height number
local Rect = {}



---@class Vector2f
---@field x number
---@field y number
local Vector2f = {}
---@param a Vector2f
---@return Vector2f
function Vector2f.scale (a) end
---@param a Vector2f
---@param b Vector2f
---@return number
function Vector2f.dot (a, b) end
---@param a Vector2f
---@return number
function Vector2f.sqrMagnitude (a) end
---@param a Vector2f
---@return number
function Vector2f.magnitude (a) end
---@param a Vector2f
---@return number
function Vector2f.angle (a) end
---@param a Vector2f
---@return Vector2f
function Vector2f.inverse (a) end
---@param a Vector2f
---@return Vector2f
function Vector2f.normalize (a) end
---@param a Vector2f
---@return Vector2f
function Vector2f.normalizeSafe (a) end
---@param a Vector2f
---@param b Vector2f
---@param t number
---@return Vector2f
function Vector2f.lerp (a, b, t) end
---@param a Vector2f
---@param b Vector2f
---@return Vector2f
function Vector2f.min (a, b) end
---@param a Vector2f
---@param b Vector2f
---@return Vector2f
function Vector2f.max (a, b) end
---@param a Vector2f
---@param b Vector2f
---@param maxDist number
---@return boolean
function Vector2f.compareApproximately (a, b, maxDist) end
---@param a Vector2f
---@return boolean
function Vector2f.isNormalized (a) end
---@param a Vector2f
---@param b Vector2f
---@return Vector2f
function Vector2f.abs (a, b) end
---@param a Vector2f
---@return boolean
function Vector2f.isFinite (a) end
---@param a Vector2f
---@return Vector2f
function Vector2f.normalizeFast	(a) end
---@param a Vector2f
---@return number
function Vector2f.distance (a) end
---@param a Vector2f
---@return Vector2f
function Vector2f.copy (a) end



---@class Vector3f
---@field x number
---@field y number
---@field z number
local Vector3f = {}
---@param a Vector3f
---@return Vector3f
function Vector3f.scale (a) end
---@param a Vector3f
---@param b Vector3f
---@return number
function Vector3f.dot (a, b) end
---@param a Vector3f
---@return number
function Vector3f.sqrMagnitude (a) end
---@param a Vector3f
---@return number
function Vector3f.magnitude (a) end
---@param a Vector3f
---@return Vector3f
function Vector3f.inverse (a) end
---@param a Vector3f
---@return Vector3f
function Vector3f.normalize (a) end
---@param a Vector3f
---@return Vector3f
function Vector3f.normalizeSafe (a) end
---@param a Vector3f
---@param b Vector3f
---@param t number
---@return Vector3f
function Vector3f.lerp (a, b, t) end
---@param a Vector3f
---@param b Vector3f
---@return Vector3f
function Vector3f.min (a, b) end
---@param a Vector3f
---@param b Vector3f
---@return Vector3f
function Vector3f.max (a, b) end
---@param a Vector3f
---@param b Vector3f
---@param maxDist number
---@return boolean
function Vector3f.compareApproximately (a, b, maxDist) end
---@param a Vector3f
---@return boolean
function Vector3f.isNormalized (a) end
---@param a Vector3f
---@param b Vector3f
---@return Vector3f
function Vector3f.abs (a, b) end
---@param a Vector3f
---@return boolean
function Vector3f.isFinite (a) end
---@param a Vector3f
---@return Vector3f
function Vector3f.normalizeFast	(a) end
---@param a Vector3f
---@param b Vector3f
---@return number
function Vector3f.distance (a, b) end
---@param a Vector3f
---@param b Vector3f
---@return Vector3f
function Vector3f.cross (a, b) end
---@param a Vector3f
---@param n Vector3f
---@return Vector3f
function Vector3f.reflectVector (a, n) end
---@param a Vector3f
---@param b Vector3f
---@return Vector3f
function Vector3f.project (a, b) end
---@param a Vector3f
---@param b Vector3f
---@param maxAngle number
---@param maxMagnitude number
---@return Vector3f
function Vector3f.rotateTowards (a, b, maxAngle, maxMagnitude) end
---@param a Vector3f
---@return Vector3f
function Vector3f.copy (a) end



---@class Vector4f
---@field x number
---@field y number
---@field z number
---@field w number
local Vector4f = {}
---@param a Vector4f
---@param b Vector4f
---@return number
function Vector4f.dot (a, b) end
---@param a Vector4f
---@param b Vector4f
---@param t number
---@return Vector4f
function Vector4f.lerp (a, b, t) end
---@param a Vector4f
---@return Vector4f
function Vector4f.copy (a) end



---@class Quaternionf
---@field x number
---@field y number
---@field z number
---@field w number
local Quaternionf = {}
---@return Quaternionf
function Quaternionf.identity () end
---@param a Quaternionf
---@return Quaternionf
function Quaternionf.inverse (a) end
---@param a Vector3f
---@return Quaternionf
function Quaternionf.eulerToQuaternion (a) end
---@param a Quaternionf
---@return Vector3f
function Quaternionf.quaternionToEuler (a) end
---@param a Quaternionf
---@return Quaternionf
function Quaternionf.copy (a) end
---@param from Vector3f
---@param to Vector3f
---@return Quaternionf
function Quaternionf.fromToQuaternionSafe (from, to) end
---@param viewVec Vector3f
---@param upVec Vector3f
---@return Quaternionf
function Quaternionf.lookRotationToQuaternion (viewVec, upVec) end
---@param a Quaternionf
---@param v Vector3f
---@return Vector3f
function Quaternionf.rotateVectorByQuat (a, v) end
---@param a Quaternionf
---@param b Quaternionf
---@param t number
---@return Quaternionf
function Quaternionf.slerp (a, b, t) end
---@param axis Vector3f
---@param angle number
---@return Quaternionf
function Quaternionf.axisAngleToQuaternion (axis, angle) end



---@class Matrix4x4f
local Matrix4x4f = {}
---@param row number
---@param col number
---@param val number
function Matrix4x4f:set (row, col, val) end
---@param row number
---@param col number
---@return number
function Matrix4x4f:get (row, col) end
---@param col number
---@return Vector4f
function Matrix4x4f:getColumn (col) end
---@param v Vector3f
---@return Vector3f
function Matrix4x4f:multiplyVector3 (v) end
---@param v Vector4f
---@return Vector4f
function Matrix4x4f:multiplyVector4 (v) end
---@param p Vector3f
---@return Vector3f
function Matrix4x4f:multiplyPoint3 (p) end
---@return number
function Matrix4x4f:getDeterminant () end
---@return Matrix4x4f
function Matrix4x4f:transpose () end
---@return Matrix4x4f
function Matrix4x4f:invert_Full () end
---@return Matrix4x4f
function Matrix4x4f:setIdentity () end
---@param from Vector3f
---@param to Vector3f
---@return Matrix4x4f
function Matrix4x4f:setFromToRotation (from, to) end
---@param v1 Vector3f
---@param v2 Vector3f
---@param v3 Vector3f
---@return Matrix4x4f
function Matrix4x4f:setOrthoNormalBasis (v1, v2, v3) end
---@param v1 Vector3f
---@param v2 Vector3f
---@param v3 Vector3f
---@return Matrix4x4f
function Matrix4x4f:setOrthoNormalBasisInverse (v1, v2, v3) end
---@param v Vector3f
---@return Matrix4x4f
function Matrix4x4f:setScale (v) end
---@param v Vector3f
---@return Matrix4x4f
function Matrix4x4f:scale (v) end
---@param epsilon number
---@return boolean
function Matrix4x4f:isIdentity (epsilon) end
---@param input Vector3f
---@param output Vector3f
---@return boolean
function Matrix4x4f:perspectiveMultiplyVector3 (input, output) end
---@param input Vector3f
---@param output Vector3f
---@return boolean
function Matrix4x4f:perspectiveMultiplyPoint3 (input, output) end
---@param v Vector3f
---@return Vector3f
function Matrix4x4f:inverseMultiplyPoint3Affine (v) end
---@param v Vector3f
---@return Vector3f
function Matrix4x4f:inverseMultiplyVector3Affine (v) end
---@return Matrix4x4f
function Matrix4x4f:copy () end
---@param fovy number
---@param aspect number
---@param near number
---@param far number
---@return Matrix4x4f
function Matrix4x4f.setPerspective (fovy, aspect, near, far) end
---@param cotanHalfFOV number
---@param near number
---@param far number
---@return Matrix4x4f
function Matrix4x4f:setPerspectiveCotan (cotanHalfFOV, near, far) end
---@param left number
---@param right number
---@param bottom number
---@param top number
---@param near number
---@param far number
---@return Matrix4x4f
function Matrix4x4f:setOrtho (left, right, bottom, top, near, far) end
---@param left number
---@param right number
---@param bottom number
---@param top number
---@param near number
---@param far number
---@return Matrix4x4f
function Matrix4x4f:setFrustum (left, right, bottom, top, near, far) end
---@return Vector3f
function Matrix4x4f:getAxisX () end
---@return Vector3f
function Matrix4x4f:getAxisY () end
---@return Vector3f
function Matrix4x4f:getAxisZ () end
---@return Vector3f
function Matrix4x4f:getPosition () end
---@param row number
---@return Vector4f
function Matrix4x4f:getRow (row) end
---@param v Vector3f
function Matrix4x4f:setAxisX (v) end
---@param v Vector3f
function Matrix4x4f:setAxisY (v) end
---@param v Vector3f
function Matrix4x4f:setAxisZ (v) end
---@param v Vector3f
function Matrix4x4f:setPosition (v) end
---@param col number
---@param v Vector4f
function Matrix4x4f:setColumn (col, v) end
---@param v Vector3f
function Matrix4x4f:setTranslate (v) end
---@param inP Vector3f
---@param inX Vector3f
---@param inY Vector3f
---@param inZ Vector3f
---@return Matrix4x4f
function Matrix4x4f:setPositionAndOrthoNormalBasis (inP, inX, inY, inZ) end
---@param v Vector3f
---@return Matrix4x4f
function Matrix4x4f:translate (v) end
---@param v Vector3f
---@return Matrix4x4f
function Matrix4x4f:addTranslate (v) end
---@param t Vector3f
---@param r Quaternionf
function Matrix4x4f:setTR (t, r) end
---@param t Vector3f
---@param r Quaternionf
---@param s Vector3f
function Matrix4x4f:setTRS (t, r, s) end
---@param t Vector3f
---@param r Quaternionf
function Matrix4x4f:setTRInverse (t, r) end
---@param outT Vector3f
---@param outS Vector3f
---@param outR Quaternionf
function Matrix4x4f:getDecompose (outT, outS, outR) end
---@param m Matrix4x4f
---@param epsilon Vector3f
---@return boolean
function Matrix4x4f:compareApproximately (m, epsilon) end
---@param input Vector3f
---@param inStride number
---@param output Vector3f
---@param outStride number
---@param count number
function Matrix4x4f:transformPoints3x3 (input, inStride, output, outStride, count) end
---@param input Vector3f
---@param inStride number
---@param output Vector3f
---@param outStride number
---@param count number
function Matrix4x4f:transformPoints3x4 (input, inStride, output, outStride, count) end
---@param input Matrix4x4f
---@param output Matrix4x4f
function Matrix4x4f:multiplyMatrices3x4 (input, output) end
---@param input Matrix4x4f
---@param output Matrix4x4f
function Matrix4x4f.copyMatrix (input, output) end
---@param input Matrix4x4f
---@param output Matrix4x4f
function Matrix4x4f.transposeMatrix4x4 (input, output) end
---@param input1 Matrix4x4f
---@param input2 Matrix4x4f
---@param output Matrix4x4f
function Matrix4x4f.multiplyMatrices4x4 (input1, input2, output) end
---@param input1 Matrix4x4f
---@param input2 Matrix4x4f
---@param output Matrix4x4f
---@param count number
function Matrix4x4f.multiplyMatrixArray4x4 (input1, input2, output, count) end
---@param base Matrix4x4f
---@param input1 Matrix4x4f
---@param input2 Matrix4x4f
---@param output Matrix4x4f
---@param count number
function Matrix4x4f.multiplyMatrixArrayWithBase4x4 (base, input1, input2, output, count) end
---@param output Matrix4x4f
---@return boolean
function Matrix4x4f:invert_General3D (output) end
---@return boolean
function Matrix4x4f:isFinite () end



---@class Color
---@field r number
---@field g number
---@field b number
---@field a number
local Color = {}



---@class AABB
---@field min_x number
---@field min_y number
---@field min_z number
---@field max_x number
---@field max_y number
---@field max_z number
local AABB = {}